Event Loop
440 字
2 分钟
Event Loop
简单来说,知道了Event Loop,其实就是知道了代码执行的优先级:先call stack,后mircotask quene,最后work quene
- call stack中存放了同步函数,例如
console.log()、setTimeout()等 - mircotask quene中存放了Promise中的
resolve()函数 - work quene中存放了各种回调函数
以下面的代码为例:
setTimeout(() => { console.log("timeout");}, 10);Promise.resolve().then(() => console.log("Promise"));
console.log("Others");下面是代码的执行流程:
- 首先
setTimeout()函数会进入call stack中 - 由于
setTimeout()中存在回调函数,因此() => console.log('timeout')会进入work quene中 Promise.resolve()进入call stack中,由于resolve()中的函数中没有代码执行,因此会被弹出call stack,紧接着then()进入call stack,由于then()中存在resolve的中间处理逻辑,因此() => console.log('Promise')会进入microtask quene中console.log('Others')是同步函数,进入call stack,执行后出栈call stack栈空后,先执行microtask quene中的函数,里面只有() => console.log('Promise')- 最后执行
work quene中的函数,里面只有() => console.log('timeout')
因此最后函数的打印顺序为:Others、Promise、timeout
最初js的代码执行逻辑还是比较复杂的,但在引入async和await之后,就可以将所有的异步函数进行同步处理,确保了代码的执行顺序和编写顺序一致
nodejs在组成上包含了v8引擎和libuv,其中v8引擎负责代码的执行,比如call stack和microtask quene中的代码,event loop也是由v8引擎提供的,而libuv是一个多线程模型,用于处理work quene中的回调函数和一些耗时耗力的操作
很多网站都推荐使用Chrome进行访问,其中的原因之一,就是v8引擎是浏览器内置的js引擎中性能最好的,而Chrome中使用的就是v8
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
WebMCP尝鲜
fe你需要给你的Web应用添加WebMCP了
2
Web Workers
fe2026-08-31
3
人生第一次漫展
daily2026-10-05
4
论学长
想太多学长是一个短期称谓,总有失去,无法拾起的一天
5
Zen浏览器自定义
教程浏览器默认样式太丑,通过CSS修改配置文件来优化样式
随机文章随机推荐








